<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>finally</title>
</head>
<body>
  <script>
    'use strict'
    onload = function () {

      // 无论 Promise 实例的状态为成功还是失败，finally 中的回调函数都会执行
      // finally 不接收 Promise 实例的值(回调函数没有实参)

      // finally 的返回值
      //  1.默认穿透(不会影响原来的 Promise 实例)
      //  2.如果 finally 回调函数的返回值为一个失败状态的 Promise 实例，则 finally 的返回值与该 Promise 实例的状态保持一致
      //  3.如果 finally 回调函数中抛出异常但未进行处理，finally 会返回一个失败状态的 Promise 值为错误对象

      const promise = new Promise((resolve, reject) => {
        try {
          // 模拟异常
          throw new Error('请求出错')
          // 模拟请求
          setTimeout(() => {
            console.log('请求成功')
            resolve({
              username: '于谦',
              hobby: ['抽烟', '喝酒', '烫头']
            })
          }, 2000)
        } catch (error) {
          reject(error.message)
        }
      })

      promise.then(result => {
        console.log(result)
      }).catch(err => {
        console.log(err)
      }).finally(() => {
        console.log('finally')
      })
    }
  </script>
</body>
</html>